<!-- 订单列表 -->
<template>
    <div class="travel-order-list">
        <div ref="dgtools" class="filter-container">
            <div class="dgts-row">
                <div class="dgts-text-tj1">
                    <b class="tr-it-title">统计</b>
                    <!-- <el-divider direction="vertical"></el-divider>
                    <b class="tr-it c-green">车辆总数：{{tjData.carCount}}辆</b> -->
                    <!-- <el-divider direction="vertical"></el-divider>
                    <b class="tr-it c-green">订单总价：{{tjData.totalPrice}}元</b> -->
                    <el-divider direction="vertical"></el-divider>
                    <b class="tr-it c-red">总欠款：{{ tjData.totalShouldPay }}元</b>
                    <el-divider direction="vertical"></el-divider>
                    <b class="tr-it c-red">本月欠款：{{ tjData.totalSearchPay }}元</b>
                </div>

                <div class="dgts-text-tj2">
                    <b class="tr-it-title">所选统计</b>
                    <el-divider direction="vertical"></el-divider>
                    <b class="tr-it c-green">订单总价：{{ seledTotalPrice }}元</b>
                    <el-divider direction="vertical"></el-divider>
                    <b class="tr-it c-red">总欠款：{{ seledTotalShouldPay }}元</b>
                </div>
            </div>

            <div class="dgts-fm">
                <el-select v-model="dg.ps.timeType" :placeholder="'时间类型'" style="width: 100px">
                    <el-option :label="'用车时间'" :value="'1'"></el-option>
                    <el-option :label="'下单时间'" :value="'2'"></el-option>
                    <el-option :label="'续团时间'" :value="'3'"></el-option>
                </el-select>

                <el-date-picker v-model="dg.ps.setime" type="daterange" range-separator="至" start-placeholder="开始日期"
                    end-placeholder="结束日期" style="width: 210px" value-format="yyyy-MM-dd">
                </el-date-picker>

                <el-select v-model="dg.ps.compositor" :placeholder="'排序'" style="width: 80px">
                    <el-option :label="'升序'" :value="'ASC'"></el-option>
                    <el-option :label="'降序'" :value="'DESC'"></el-option>
                </el-select>

                <el-input style="width: 140px" placeholder="订单号" v-model="dg.ps.orderNum">
                </el-input>

                <el-input style="width: 220px" placeholder="行程详情/客户/驾驶员/业务员备注" v-model="dg.ps.routeDetail">
                </el-input>

                <el-select v-model="dg.ps.orderStatus" multiple collapse-tags :placeholder="'订单状态'" style="width: 180px">
                    <el-option :label="'全部状态'" :value="''" @click.native="selAllOrderStatu">
                    </el-option>
                    <el-option v-for="it in orderStates" :label="it.name" :key="it.id" :value="it.id">
                    </el-option>
                </el-select>

                <el-select v-model="dg.ps.serviceType" :placeholder="'业务类型'" style="width: 150px">
                    <el-option v-for="it in serviceTypes" :key="it.val" :label="it.label" :value="it.val">
                    </el-option>
                </el-select>

                <el-input style="width: 80px" placeholder="座位数" maxlength="2"
                    onkeyup="this.value = this.value.replace(/^(0+)|[^\d]+/g, '');" v-model="dg.ps.seats">
                </el-input>

                <el-input style="width: 100px" placeholder="车牌号" maxlength="8" v-model="dg.ps.plateNum">
                </el-input>

                <el-input style="width: 130px" placeholder="驾驶员姓名/手机号" maxlength="11" v-model="dg.ps.driver">
                </el-input>

                <template v-if="dg.ftState">
                    <el-select v-model="dg.ps.staff" clearable filterable :placeholder="'员工'" style="width: 140px">
                        <el-option v-for="it in dutyManList" :key="it.uname" :label="it.realName" :value="it.uname">
                        </el-option>
                    </el-select>

                    <el-select v-model="dg.ps.payState" :placeholder="'支付状态'" style="width: 100px">
                        <el-option :label="'未付款'" :value="'0'"></el-option>
                        <el-option :label="'已垫支'" :value="'1'"></el-option>
                        <el-option :label="'已付款'" :value="'2'"></el-option>
                    </el-select>

                    <el-select v-model="dg.ps.orderSource" :placeholder="'订单来源'" style="width: 100px">
                        <el-option :label="'电脑端单位'" :value="'PC_COMPANY'"></el-option>
                        <el-option :label="'电脑端个人'" :value="'PC_PERSONAL'"></el-option>
                        <el-option :label="'移动端单位'" :value="'MOBILE_COMPANY'"></el-option>
                        <el-option :label="'移动端个人'" :value="'MOBILE_PERSONAL'"></el-option>
                    </el-select>
                </template>

                <ShMoreFt :dgName="dg.dgName" @myclick="onShMoreFt"></ShMoreFt>

                <el-button type="primary" icon="el-icon-search" @click="getDgList">搜索</el-button>
                <el-button type="primary" icon="el-icon-edit" @click="editChildOrder">修改</el-button>
                <el-button type="primary" icon="el-icon-circle-check" @click="payApply">付款申请</el-button>
                <el-button type="primary" icon="el-icon-circle-check" @click="confirmTravelPrice(1)">确认车价</el-button>
                <el-button type="primary" icon="el-icon-circle-close" @click="confirmTravelPrice(0)">取消车价</el-button>

            </div>
            <TableSelfSet style="position: fixed; top: 161px !important;right:20px !important;" v-if="dg.columns.length > 0"
                :tbTitle="'顺风车订单列表'" :dgName="dg.dgName" :tbId="dg.tbName" :srcCols="dg.srcCols" :columns="dg.columns"
                @saveSet="saveTbSet" />
        </div>


        <el-table :row-style="rowStyle" :ref="dg.tbName" :data="dg.list" row-key="id" :height="bodyHeight" border fit
            :row-class-name="rowClassName" @header-dragend="dragHeader" @selection-change="selRowChange">
            <el-table-column fixed="left" type="index" label="编号" width="40" align="center"></el-table-column>
            <el-table-column fixed="left" type="selection" width="40" align="center"></el-table-column>
            <el-table-column v-for="(col, index) in dg.columns" :key="index" :class-name="dg.dgName" :prop="col.field"
                :label="col.label" :width="col.width">
                <template slot-scope="{row}">
                    <template v-if="col.field == 'status'">
                        <span>{{ row.status.label }}</span>
                    </template>

                    <span v-else-if="col.field == 'routeSimpleName'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.routeSimpleName" :key="i">{{ it }}</div>
                        </template>
                        <template v-else>{{ row.routeSimpleName }}</template>
                    </span>

                    <span v-else-if="col.field == 'plateNum'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.plateNum" :key="i">{{ it }}</div>
                        </template>
                        <template v-else>{{ row.plateNum }}</template>
                    </span>

                    <span v-else-if="col.field == 'needSeats'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.needSeats" :key="i">{{ it }}</div>
                        </template>
                        <template v-else>{{ row.needSeats }}</template>
                    </span>

                    <span v-else-if="col.field == 'needCars'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.needCars" :key="i">{{ it }}</div>
                        </template>
                        <template v-else>{{ row.needCars }}</template>
                    </span>

                    <span v-else-if="col.field == 'driver'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.driver" :key="i">{{ it && it.split('-')[0] }}</div>
                        </template>
                        <template v-else>{{ row.driver }}</template>
                    </span>

                    <span v-else-if="col.field == 'sdate'">{{ row.stime.split(' ')[0] }}</span>

                    <span v-else-if="col.field == 'stime'">{{ row.stime.substr(11, 5) }}</span>

                    <span v-else-if="col.field == 'edate'">{{ row.etime.split(' ')[0] }}</span>

                    <span v-else-if="col.field == 'etime'">{{ row.etime.substr(11, 5) }}</span>

                    <template v-else-if="col.field == 'routeDetail'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.routeDetail" :key="i" v-html="it.replace(/@/g, '<br />')"></div>
                        </template>
                        <template v-else>
                            <span v-html="row.routeDetail.replace(/@/g, '<br />')"></span>
                        </template>
                    </template>

                    <template v-else-if="col.field == 'cusNote'">
                        <template v-if="row.isMain">
                            <div v-for="(it, i) in row.cusNote" :key="i" v-html="it"></div>
                        </template>
                        <template v-else>
                            <span v-html="row.cusNote"></span>
                        </template>
                    </template>

                    <template v-else-if="col.field == 'dutyBaseUser'">
                        <span>{{ row.dutyBaseUser.split('=')[1] }}-{{ row.dutyBaseUser.split('=')[2] }}</span>
                    </template>

                    <span v-else-if="col.field == 'addTime'">{{ row.addTime.substr(0, 16) }}</span>
                    <template v-else-if="col.field == 'isConfirmPrice'">
                        <span>{{ row.isConfirmPrice == 0 ? '否' : "是" }}</span>
                    </template>
                    <template v-else-if="col.field == 'serviceMan'">
                        <span>{{ row.serviceMan }}</span>
                    </template>
                    <template v-else-if="col.field == 'serviceType'">
                        <span>{{ row.serviceType == 'COUNTY_SER' ? "县际业务" : row.serviceType == 'CITY_SER' ?
                            '市际业务' : "省际业务" }}</span>
                    </template>
                    <template v-else>{{ getColVal(row, col.field) }}</template>
                </template>
            </el-table-column>
        </el-table>
        <pagination v-show="dg.total > 0" :total="dg.total" :page.sync="dg.ps.page" :limit.sync="dg.ps.rows"
            @pagination="getDgList" />

        <AddOrder v-if="md.addOrder.state" :state="md.addOrder.state" :order="md.addOrder.order"
            :allServiceManList="serviceManList" @getMdState="addOrderMdState" @reloadDg="getDgList" />

        <UpdOrder v-if="md.updOrder.state" :state="md.updOrder.state" :order="md.updOrder.order"
            :allServiceManList="serviceManList" @getMdState="updOrderMdState" @reloadDg="getDgList" />

    </div>
</template>

<script>
import elDragDialog from '@/directive/el-drag-dialog';
import DataGridBase from '@/views/mixins/DataGridBase';
import DataGridResize from '@/views/mixins/DataGridResize';
import TableSelfSet from '@/components/TableSelfSet';
import Pagination from '@/components/Pagination';
import ShMoreFt from '@/components/ShMoreFt';

import AddOrder from '@/views/business-man/order-list/add-order';
import UpdOrder from '@/views/business-man/order-list/upd-order';

import * as commService from '@/api/services/common.service';
import * as orderService from '@/api/services/order.service';
import * as financeService from '@/api/services/travel/finance.service';

export default {
    name: 'OrderList',
    mixins: [DataGridBase, DataGridResize],
    directives: { elDragDialog },
    components: {
        TableSelfSet,
        Pagination,
        ShMoreFt,
        AddOrder,
        UpdOrder,
    },
    data() {
        let cols = [
            { label: '行程简称', field: 'routeSimpleName', width: 80 },
            { label: '订单状态', field: 'status', width: 80 },
            { label: '已派车辆', field: 'plateNum', width: 85 },
            { label: '驾驶员', field: 'driver', width: 80 },
            { label: '车型', field: 'needSeats', width: 80 },
            { label: '台数', field: 'needCars', width: 80 },
            { label: '航班号/车次号', field: 'allFlightTrainNo', width: 90 },
            { label: '出发日期', field: 'sdate', width: 85 },
            { label: '出发时间', field: 'stime', width: 70 },
            { label: '到达日期', field: 'edate', width: 85 },
            { label: '到达时间', field: 'etime', width: 70 },
            { label: '行程详情', field: 'routeDetail', width: 700 },
            { label: '客户备注', field: 'cusNote', width: 700 },
            { label: '订单价格', field: 'price', width: 70 },
            { label: '确认车价', field: 'isConfirmPrice', width: 70 },
            { label: '已付金额', field: 'alGathPrice', width: 70 },
            { label: '订单号', field: 'orderNum', width: 150 },
            { label: '行程联系人', field: 'routeLink', width: 125 },
            { label: '业务员', field: 'serviceMan', width: 125 },
            { label: '业务类型', field: 'serviceType', width: 85 },
            { label: '添加时间', field: 'addTime', width: 125 }
        ];

        return {
            resDgList: [], // 原table列表数据（为了复制主订单功能）
            dg: {// 数据列表参数
                dgName: 'dg',
                tbName: 'orderListTb',
                total: 0,
                list: [],
                srcCols: cols,
                columns: [],
                selRows: [],
                ftState: false,
                ps: { // 过滤参数
                    page: 1, rows: 100,
                    /**时间类型 eg:1.用车时间,2.下单时间,3.续团时间 */
                    timeType: "1",
                    /**顺序,默认传值ASC eg:ASC,DESC */
                    compositor: "ASC",
                    /**起止时间 */
                    setime: [],
                    /**订单号 */
                    orderNum: "",
                    /**行程详情 */
                    routeDetail: "",
                    /**订单状态，多个逗号拼接 */
                    orderStatus: ['NOT_DIS_CAR', 'NOFINISHED_DIS_CAR', 'FINISHED_DIS_CAR', 'PENDING'],
                    /**订单业务类型 eg:COUNTY_SER县际业务 CITY_SER市际业务 PROVINCE_SER省际业务 */
                    serviceType: "",
                    /**座位数 */
                    seats: null,
                    /**车牌号 */
                    plateNum: "",
                    /**驾驶员（手机/姓名） */
                    driver: "",
                    /**订单来源 eg:PC_COMPANY电脑端单位 PC_PERSONAL电脑端个人 MOBILE_COMPANY移动端单位 MOBILE_PERSONAL移动端个人 */
                    orderSource: "",
                },

            },
            // 数组统计
            tjData: {
                // 车辆总数
                carCount: '0',
                // 总欠款
                totalShouldPay: '0',
                // 本月欠款
                totalSearchPay: '0',
            },

            md: { // 弹框数据
                // 添加订单-弹框
                addOrder: { state: false, order: null },
                // 修改订单-弹框
                updOrder: { state: false, order: null },
            },

            orderStates: [ // 主订单状态数组
                { id: "NOT_DIS_CAR", name: "未派车" },
                { id: "NOFINISHED_DIS_CAR", name: "已派车未派完" },
                { id: "FINISHED_DIS_CAR", name: "已完成派车" },
                { id: "PENDING", name: "待定" },
            ],
            serviceTypes: [ // 业务类型
                { val: '', label: '订单类型（全部）' },
                { val: 'COUNTY_SER', label: '县际业务' },
                { val: 'CITY_SER', label: '市际业务' },
                { val: 'PROVINCE_SER', label: '省际业务' },
            ],
            orderFromArr: [ // 订单来源数组
                { id: 'PC_COMPANY', name: '电脑端-单位' },
                { id: 'PC_PERSONAL', name: '电脑端-个人' },
                { id: 'MOBILE_COMPANY', name: '移动端-单位' },
                { id: 'MOBILE_PERSONAL', name: '移动端-个人' }
            ],
            serviceManList: [], // 业务员数据列表 
            clientList: [],     // 客户数据列表   
            dutyManList: [],    // 联系人数据列表                   
        }
    },
    computed: {
        // 所选-订单总价
        seledTotalPrice() {
            let money = 0, rows = this.getSeledRows();
            rows.forEach(it => { money += parseFloat(it.price); });
            return (money).toFixed(2);
        },
        // 所选-总欠款
        seledTotalShouldPay() {
            let money = 0, rows = this.getSeledRows();
            rows.forEach(it => { money += (parseFloat(it.price) - parseFloat(it.alGathPrice ? it.alGathPrice : 0)); });
            return (money).toFixed(2);
        },
    },
    created() {
        const that = this;

        // 定义搜索时间默认本月
        if (that.dg.ps.setime.length == 0) {
            that.dg.ps.setime[0] = that.$moment().startOf('month').format('YYYY-MM-DD');
            that.dg.ps.setime[1] = that.$moment().endOf('month').format('YYYY-MM-DD');
        }

        that.initTbSetData(that.dg.dgName);

        that.getDgList();
        // that.cusUnameList();
    },
    methods: {
        rowStyle({ row, rowIndex }) {
            let status = row.isConfirmPrice;
            if (status == '1') {

                return { 'background': '#FBAEAA', 'color': '#000000', 'font-weight': '600' };
            }

            return {};
        },
        // 确认车价
        confirmTravelPrice(number) {
            const that = this, U = that.U, rows = that.getSeledRows();

            let id = []
            for (let i = 0; i < rows.length; i++) {
                id.push(rows[i].id)
            }
            let idstr = id.join(',')

            if (rows.length < 1) {
                U.qerror('请至少选择一条订单');
            } else {
                if (number == 0) {
                    U.qconfim(`是否取消车价？`).then(r => {
                        if (r) {
                            let ps = {
                                ids: idstr,
                                setValue: number,
                            }
                            orderService.confirmTravelPrice(ps).then(res => {


                                if (!res || res.code != 1) {
                                    that.U.qerror(res.msg);
                                } else {
                                    that.getDgList();
                                }
                            });
                        }
                    });
                } else {
                    U.qconfim(`是否确认车价？`).then(r => {
                        if (r) {
                            let ps = {
                                ids: idstr,
                                setValue: number,
                            }
                            orderService.confirmTravelPrice(ps).then(res => {


                                if (!res || res.code != 1) {
                                    that.U.qerror(res.msg);
                                } else {
                                    that.getDgList();
                                }
                            });
                        }
                    });
                }

            }




        },

        /** 选择全部订单状态 */
        selAllOrderStatu() {
            const that = this;

            if (that.dg.ps.orderStatus.length >= 3) {
                // 全选，则取消全选
                that.dg.ps.orderStatus = [];
            } else {
                that.dg.ps.orderStatus = [];
                // 未全选，则全选
                that.orderStates.forEach(it => {
                    if (it) that.dg.ps.orderStatus.push(it.id)
                });
            }
        },
        /**
         * 处理列表数据（将线性数据处理为树形数据）
         * @param list 欲处理的数据
         */
        filterDgList(list) {
            const that = this;

            let resList = [], pageTotalPrice = 0;
            list.forEach(it => {
                pageTotalPrice += parseFloat(it.price);

                // 主订单状态-描述
                let mstatusObj = that.orderStates.find((os) => { return it.status == os.id; });
                // 所有的行程简称
                let allRouteSimpleName = [];
                // 所有的已派车辆：车牌号数组字
                let allPlateNum = [];
                // 所有的需求车辆座位数
                let allNeedSeats = [];
                // 所有的需求车辆数
                let allNeedCars = [];
                // 所有的驾驶员
                let allDriver = [];
                // 所有的行程详情
                let allRouteDetail = [];
                // 所有客户备注
                let allCusNote = [];
                // 所有驾驶员备注
                let allDriverNote = [];
                // 所有业务员备注
                let allServiceNote = [];
                // 旅网金额
                let allTravelPrepayPrice = 0;
                // 自网金额
                let allSelfPrepayPrice = 0;
                // 所有航班/车次号
                let allFlightTrainNo = [];

                // 遍历子订单，整理子订单数据
                let children = [];
                it.carOrders.forEach(cit => {
                    // 子订单状态-描述
                    let cstatusObj = that.orderStates.find((os) => { return cit.status == os.id; });
                    // 累加行程简称
                    if (!allRouteSimpleName.find(sr => sr == cit.routeSimpleName)) {
                        allRouteSimpleName.push(cit.routeSimpleName);
                    }
                    // 派单车辆
                    let plateNum = cit.disCarId ? cit.disCarId.plateNum : '';
                    if (plateNum) allPlateNum.push(plateNum);
                    // 驾驶员信息
                    let driver = '';
                    if (cit.disCarId) {
                        if (cit.disCarId.mainDriver) {// 自营车辆
                            driver = cit.disCarId.mainDriver.uname + '=' + cit.disCarId.mainDriver.realName + '=' + cit.disCarId.mainDriver.phone;
                        } else if (cit.disCarId.outDriverInfo) {// 外调车辆
                            driver = cit.disCarId.outDriverInfo + "=" + cit.disCarId.outDriverInfo.split(',')[1] + "=" + cit.disCarId.outDriverInfo.split(',')[0];
                        }
                    }
                    if (driver) allDriver.push(`${driver.split('=')[1]}-${driver.split('=')[2]}`);
                    // 累加行程详情
                    let routeDetail = plateNum ? `${plateNum}=${cit.routeDetail}` : `未派车=${cit.routeDetail}`;
                    allRouteDetail.push(routeDetail);
                    // 累加客户备注
                    allCusNote.push(cit.cusNote);
                    // 累加驾驶员备注
                    allDriverNote.push(cit.driverNote);
                    // 累加业务员备注
                    allServiceNote.push(cit.serviceNote);
                    // 累加旅网金额
                    allTravelPrepayPrice += parseFloat(cit.travelPrepayPrice);
                    // 累加自网金额
                    allSelfPrepayPrice += parseFloat(cit.selfPrepayPrice);
                    // 订单类型
                    let serviceType = that.serviceTypes.find((o) => { return cit.serviceType == o.val; });
                    // 航班/车次号
                    cit.dayMps?.forEach(dit => {
                        if (dit?.routeStationInfo?.num) allFlightTrainNo.push(dit?.routeStationInfo?.num);
                    });

                    children.push({
                        dgName: it.dgName,
                        id: cit.id,
                        // 订单号
                        orderNum: cit.orderNum,
                        // 是否使用自己的车
                        useSelf: cit.useSelf,
                        // 主订单编号
                        mainOrderNum: cit.mainOrderNum,
                        // 行程简称
                        routeSimpleName: cit.routeSimpleName,
                        // 订单状态
                        status: { val: cit.status, label: cstatusObj ? cstatusObj.name : '' },
                        // 派单车辆：车牌号
                        plateNum: plateNum,
                        // 需求座位数
                        needSeats: cit.needSeats,
                        // 需求车辆数
                        needCars: 1,
                        // 航班/车次号
                        flightTrainNo: cit.dayMps?.map(dit => dit?.routeStationInfo?.num ?? '').join(','),
                        // 驾驶员：驾驶员用户名=驾驶员姓名=驾驶员手机号
                        driver: driver ? `${driver.split('=')[1]}-${driver.split('=')[2]}` : '',
                        // 出发时间
                        stime: cit.stime,
                        // 结束时间
                        etime: cit.etime,
                        // 行程详情
                        routeDetail: cit.routeDetail.replace(/@/g, '<br />'),
                        // 客户备注
                        cusNote: cit.cusNote,
                        // 驾驶员备注
                        driverNote: cit.driverNote,
                        // 业务员备注
                        serviceNote: cit.serviceNote,
                        // 用车单位：用户名=姓名=手机号
                        companyName: `${cit.carOrderBase.customId.baseUserId.uname}=${cit.carOrderBase.customId.baseUserId.realName}=${cit.carOrderBase.customId.baseUserId.phone}`,
                        // 联系人：用户名=姓名=手机号
                        dutyBaseUser: `${cit.carOrderBase.dutyBaseUser.uname}=${cit.carOrderBase.dutyBaseUser.realName}=${cit.carOrderBase.dutyBaseUser.phone}`,
                        // 业务员：：用户名=姓名=手机号
                        serviceManName: cit.carOrderBase.serviceMan,
                        // 订单价格
                        price: cit.price,
                        // 已付金额
                        alGathPrice: cit.alGathPrice,
                        // 员工
                        serviceMan: cit.carOrderBase.serviceMan.split("-")[1] + '-' + cit.carOrderBase.serviceMan.split("-")[2],
                        // 确认车价
                        isConfirmPrice: cit.carOrderBase.isConfirmPrice,
                        // 旅网金额
                        travelPrepayPrice: cit.travelPrepayPrice == 0 ? '' : cit.travelPrepayPrice,
                        // 自网金额
                        selfPrepayPrice: cit.selfPrepayPrice == 0 ? '' : cit.selfPrepayPrice,
                        // 外调状态
                        isExternalName: cit.useSelf == 1 ? '否' : '是',
                        // 行程联系人
                        routeLink: '',
                        // 业务类型
                        serviceType: cit.serviceType,
                        // 添加时间
                        addTime: ''
                    });
                });

                // 所有的需求座位数/车辆数 eg：39-6-1,48-2-2,49-2-0
                if (it.needInfo) {
                    let needInfos = it.needInfo.split(',');
                    needInfos.forEach(ni => {
                        let info = ni.split('-');

                        // 累计不同车型的不同需求座位数
                        allNeedSeats.push(`${info[0]}*${info[1]}`);

                        // 累计不同车型的不同需求车辆数
                        allNeedCars.push(`${info[2]}/${info[1]}`);
                    });
                }

                // 主订单-行程详情处理
                let ards = [];
                allRouteDetail.forEach(ard => {
                    let rdIndex = ards.findIndex(rd => rd.split('=')[1] == ard.split('=')[1]);
                    if (rdIndex == -1) {
                        ards.push(ard);
                    } else {
                        let rd = ards[rdIndex];
                        if (rd.split('=')[0] == ard.split('=')[0] && ard.split('=')[0] == '未派车') {
                            ards[rdIndex] = `${ard.split('=')[0]}=${rd.split('=')[1]}`;
                        } else {
                            ards[rdIndex] = `${rd.split('=')[0]}、${ard.split('=')[0]}=${rd.split('=')[1]}`;
                        }
                    }
                });
                // 处理显示
                let newArds = [];
                ards.map((ardIt, i) => {
                    newArds.push(`${i + 1}、（${ardIt.split('=')[0]}）${ardIt.split('=')[1]}`);
                });
                allRouteDetail = newArds;

                // 主订单-客户备注处理
                let notesA = [];
                allCusNote.forEach(cn => {
                    let ai = notesA.findIndex(ait => ait == cn);
                    if (ai == -1) notesA.push(cn);
                });
                allCusNote = notesA;

                // 主订单-驾驶员备注处理
                let notesB = [];
                allDriverNote.forEach(dn => {
                    let bi = notesB.findIndex(bit => bit == dn);
                    if (bi == -1) notesB.push(dn);
                });
                allDriverNote = notesB;

                // 主订单-业务员备注处理
                let notesC = [];
                allServiceNote.forEach(sn => {
                    let ci = notesC.findIndex(cit => cit == sn);
                    if (ci == -1) notesC.push(sn);
                });
                allServiceNote = notesC;

                resList.push({
                    dgName: it.dgName,
                    // 是主订单
                    isMain: true,
                    // 主订单id
                    id: it.id,
                    // 行程简称
                    routeSimpleName: allRouteSimpleName,
                    // 是否使用自己的车
                    // useSelf: '',
                    // 主订单状态
                    status: { val: it.status, label: mstatusObj ? mstatusObj.name : '' },
                    // 所有已派车辆
                    plateNum: allPlateNum,
                    // 需求座位数
                    needSeats: allNeedSeats,
                    // 需求车辆数
                    needCars: allNeedCars,
                    // 所有航班/车次号
                    allFlightTrainNo: allFlightTrainNo.join(','),
                    // 所有驾驶员信息
                    driver: allDriver,
                    // 出发时间
                    stime: it.stime,
                    // 结束时间
                    etime: it.etime,
                    // 所有行程详情
                    routeDetail: allRouteDetail,
                    // 所有客户备注
                    cusNote: allCusNote,
                    // 所有驾驶员备注
                    driverNote: allDriverNote,
                    // 所有业务员备注
                    serviceNote: allServiceNote,
                    // 用车单位：用户名=姓名=手机号
                    companyName: `${it.carOrderBase.customId.baseUserId.uname}=${it.carOrderBase.customId.baseUserId.realName}=${it.carOrderBase.customId.baseUserId.phone}`,
                    // 联系人：用户名=姓名=手机号
                    dutyBaseUser: `${it.carOrderBase.dutyBaseUser.uname}=${it.carOrderBase.dutyBaseUser.realName}=${it.carOrderBase.dutyBaseUser.phone}`,
                    // 业务员：：用户名=姓名=手机号
                    serviceManName: it.carOrderBase.serviceMan,
                    // 主订单价格
                    price: it.price,
                    // 员工
                    serviceMan: it.carOrderBase.serviceMan.split("-")[1] + '-' + it.carOrderBase.serviceMan.split("-")[2],
                    // 确认车价
                    isConfirmPrice: it.carOrderBase.isConfirmPrice,
                    // 已付金额
                    alGathPrice: it.alGathPrice,
                    // 旅网金额
                    travelPrepayPrice: allTravelPrepayPrice == 0 ? '' : allTravelPrepayPrice,
                    // 自网金额
                    selfPrepayPrice: allSelfPrepayPrice == 0 ? '' : selfPrepayPrice,
                    // 主订单号
                    orderNum: it.orderNum,
                    // 外调状态
                    isExternalName: '',
                    // 行程联系人
                    routeLink: it.carOrderBase.routeLink,
                    // 业务类型
                    serviceType: it.serviceType,
                    // 添加时间
                    addTime: it.carOrderBase.addTime,
                    // 子订单数据
                    childOrder: children,
                });
            });
            // 赋值-当前页总价
            that.tjData.pageTotalPrice = pageTotalPrice;

            return resList;
        },
        /**
         * 获取-主订单分页列表
         */
        getDgList() {
            let that = this, ps = that.U.scopy(that.dg.ps);

            // 参数处理
            ps.startTime = ps.setime && ps.setime.length == 2 ? ps.setime[0] : '';
            ps.endTime = ps.setime && ps.setime.length == 2 ? ps.setime[1] : '';
            delete ps.setime;

            // 处理订单状态
            ps.orderStatus = ps.orderStatus.join(',');

            let loading = that.U.qloading('数据请求中...');
            orderService.getMainOrderPageList(ps).then(res => {
                that.U.qclose(loading);

                if (!res || res.code != 1) {
                    that.U.qerror('数据请求失败');
                } else {
                    // 保存-原数据列表，方便查询
                    that.resDgList = res.data;

                    let list = res.data;
                    // 保存-列表数据对象名称
                    list.forEach(it => { it.dgName = that.dg.dgName; });

                    that.dg.list = that.filterDgList(list);
                    that.dg.total = res.count;

                    // 统计数据
                    that.tjData = {
                        carCount: res.statics?.carCount,
                        totalShouldPay: res.statics?.totalShouldPay,
                        totalSearchPay: res.statics?.totalSearchPay,
                    };
                }
            });
        },

        /**
         * 获取-单位所有客户
         */
        cusUnameList() {
            const that = this;

            commService.queryComboCusPageList({ page: 1, rows: 20, find: find }).then(res => {
                if (res && res.code == 1) that.clientList = res.data;
            });
        },
        /**
         * 打开添加弹框
         */
        addOrderMdState(e) {
            const that = this;

            // 清空因复制赋值的对象
            that.md.addOrder.order = null;

            that.md.addOrder.state = e;
        },
        /**
         * 将列表行主订单数据处理成表单数据
         * @param mo 列表行数据主订单对象
         * @returns 处理后的主订单表单数据对象
         */
        getFmMainOrder(mo) {
            const that = this;

            /** 获取当前主订单下所有天数行程数据--begin */
            let dayMps = [];
            mo.carOrders.forEach(it => {
                it.dayMps.forEach(it2 => {
                    let is = dayMps.find(t => `${it2.stime}=${it2.etime}` == `${t.stime}=${t.etime}`);
                    if (!is) dayMps.push(it2);
                });
            });
            /** 获取当前主订单下所有天数行程数据--end */

            /** 选择的主订单的第一条子订单 */
            let o = mo.carOrders[0];

            // 处理添加订单所需要的数据
            let co = {};
            // 订单编号
            co.orderNum = o.orderNum;
            // 是否是主订单
            co.isMain = 1;
            // 团号
            co.groupNum = o.carOrderBase.routeName;
            // 操作员-用户名
            co.operator = o.carOrderBase.dutyBaseUser.uname;
            // 用车客户-用户名
            co.useCarUname = o.carOrderBase.customId.baseUserId.uname;
            // 员工
            co.serviceMan = o.carOrderBase.serviceMan
            // 车价
            co.isConfirmPrice = o.carOrderBase.isConfirmPrice
            // 已付金额
            co.alGathPrice = o.alGathPrice
            // 业务类型
            co.serviceType = o.serviceType
            // 联系人
            co.routeLink = {
                // 姓名
                name: o.carOrderBase.routeLink.split('-')[0],
                // 手机号
                phone: o.carOrderBase.routeLink.split('-')[1]
            };
            // 业务员
            co.serviceMan = {
                // 用户名
                uname: o.carOrderBase.serviceMan.split('-')[0],
                // 姓名
                name: o.carOrderBase.serviceMan.split('-')[1],
                // 手机号
                phone: o.carOrderBase.serviceMan.split('-')[2]
            };
            // 行程简称（取第一天行程的行程简称）
            co.routeShort = o.routeSimpleName;

            // 天数行程数组
            let dayRoutes = [];
            dayMps.forEach((it, i) => {
                let dr = {};
                // 编号
                dr.no = i + '';
                // 出发日期 2021-01-01
                dr.goDate = it.stime.split(' ')[0];
                // 开始时间 10:30
                dr.stime = it.stime.substr(11, 5);
                // 结束时间 20:00
                dr.etime = it.etime.substr(11, 5);
                // 出发地点
                dr.spoint = {
                    // 区域
                    area: `${it.spoint.city}-${it.spoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.spoint.address,
                    // 地址简称 天府广场
                    name: it.spoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.spoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.spoint.isSta == 1 ? true : false
                };
                // 上午地点数组
                let amPoints = [];
                if (it.morningPoint.length > 0) {
                    it.morningPoint.forEach(amit => {
                        amPoints.push({
                            id: amit.id + '',
                            // 区域
                            area: `${amit.city}-${amit.county}`,
                            // 地址详情 成都市 武侯区 天府广场
                            address: amit.address,
                            // 地址简称 天府广场
                            name: amit.address.split(' ')[1],
                            // 地点坐标 140.xxxxxx,30.xxxxxx
                            lnglat: amit.lngLat,
                            // 是否是站点 true-是 false-不是
                            isSta: amit.isSta == 1 ? true : false
                        });
                    });
                }
                dr.amPoints = amPoints;
                // 午餐地点
                dr.lunchPoint = !it.lunchPoint ? null : {
                    // 区域
                    area: `${it.lunchPoint.city}-${it.lunchPoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.lunchPoint.address,
                    // 地址简称 天府广场
                    name: it.lunchPoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.lunchPoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.lunchPoint.isSta == 1 ? true : false
                };
                // 下午地点数组
                let pmPoints = [];
                if (it.afternoonPoint.length > 0) {
                    it.afternoonPoint.forEach(pmit => {
                        pmPoints.push({
                            id: pmit.id + '',
                            // 区域
                            area: `${pmit.city}-${pmit.county}`,
                            // 地址详情 成都市 武侯区 天府广场
                            address: pmit.address,
                            // 地址简称 天府广场
                            name: pmit.address.split(' ')[1],
                            // 地点坐标 140.xxxxxx,30.xxxxxx
                            lnglat: pmit.lngLat,
                            // 是否是站点 true-是 false-不是
                            isSta: pmit.isSta == 1 ? true : false
                        });
                    });
                }
                dr.pmPoints = pmPoints;
                // 晚餐地点
                dr.dinnerPoint = !it.dinnerPoint ? null : {
                    // 区域
                    area: `${it.dinnerPoint.city}-${it.dinnerPoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.dinnerPoint.address,
                    // 地址简称 天府广场
                    name: it.dinnerPoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.dinnerPoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.dinnerPoint.isSta == 1 ? true : false
                };
                // 结束地点
                dr.epoint = {
                    // 区域
                    area: `${it.epoint.city}-${it.epoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.epoint.address,
                    // 地址简称 天府广场
                    name: it.epoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.epoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.epoint.isSta == 1 ? true : false
                };
                // 可换车（已取消）
                dr.changeCar = {
                    // 状态 0-否；1-是；
                    check: 0,
                    // 运价设置
                    transportPrice: '',
                    // 师傅现收
                    remindRouteCash: '',
                    // 其他设置
                    otherFees: '',
                    // 途径高速
                    wayHighSpeed: '',
                    // 行程简称
                    routeShort: ''
                };
                // 临空时间数组
                let emptyTimes = [];
                // 找到指定行程id对应的临空时间对象
                let fts = o.freeTimes.filter(ftit => ftit.dayRouteId == it.id);
                if (fts.length > 0) {
                    fts.forEach((ftit, index) => {
                        emptyTimes.push({
                            no: index + '',
                            stime: ftit.freeStime.substr(11, 5),
                            etime: ftit.freeEtime.substr(11, 5),
                            // 停靠地点
                            stopPoint: {
                                id: (index + 1) + '',
                                // 区域
                                area: `${ftit.stayPoint.city}-${ftit.stayPoint.county}`,
                                // 地址详情 成都市 武侯区 天府广场
                                address: ftit.stayPoint.address,
                                // 地址简称 天府广场
                                name: ftit.stayPoint.address.split(' ')[1],
                                // 地点坐标 140.xxxxxx,30.xxxxxx
                                lnglat: ftit.stayPoint.lngLat,
                                // 是否是站点 true-是 false-不是
                                isSta: ftit.stayPoint.isSta == 1 ? true : false
                            },
                            // 返回地点
                            backPoint: {
                                id: (index + 2) + '',
                                // 区域
                                area: `${ftit.returnPoint.city}-${ftit.returnPoint.county}`,
                                // 地址详情 成都市 武侯区 天府广场
                                address: ftit.returnPoint.address,
                                // 地址简称 天府广场
                                name: ftit.returnPoint.address.split(' ')[1],
                                // 地点坐标 140.xxxxxx,30.xxxxxx
                                lnglat: ftit.returnPoint.lngLat,
                                // 是否是站点 true-是 false-不是
                                isSta: ftit.returnPoint.isSta == 1 ? true : false
                            }
                        });
                    });
                }
                dr.emptyTimes = emptyTimes;

                // 开始/结束地点的航班/车次查询信息 
                let seStaInfo = null;
                if (it.routeStationInfo) {
                    let infoText = '', type = it.routeStationInfo.type,
                        jsType = it.routeStationInfo.isShuttle,
                        num = it.routeStationInfo.num,
                        time = it.routeStationInfo.seltime?.substr(11, 5);

                    if (time && num) {
                        if (type == 1) {// 飞机
                            if (jsType == 1) {// 接
                                infoText = `${num}降落${time}`;
                            } else {// 送
                                infoText = `${num}起飞${time}`;
                            }
                        } else if (type == 2) {// 火车
                            if (jsType == 1) {// 接
                                infoText = `${num}到达${time}`;
                            } else {// 送
                                infoText = `${num}出发${time}`;
                            }
                        }
                    }

                    seStaInfo = {
                        // 航班/车次号
                        flightTrainNo: num,
                        // 降落/起飞/进站/出站时间
                        downUpTime: it.routeStationInfo.seltime,
                        // 查询信息 
                        infoText: infoText,
                        // 站点名称
                        selStaName: it.routeStationInfo.stationName,
                        // 交通类型
                        type: type,
                        // 接送类型
                        jsType: jsType
                    };
                }
                dr.seStaInfo = seStaInfo;

                // 其他地点航班/车次信息数组 D638=2021-04-21 07:10=2=2=火车东站/@G3286=2021-04-21 07:23=2=2=火车东站
                let wpStaInfos = [];
                if (it.otherStationInfo) {
                    let oss = it.otherStationInfo.split('/@');
                    oss.forEach(osit => {
                        let os = osit.split('=');
                        let infoText = '', num = os[0], time = os[1].substr(11, 5), type = os[2], jsType = os[3];
                        if (type == 1) {// 飞机
                            if (jsType == 1) {// 接
                                infoText = `${num}降落${time}`;
                            } else {// 送
                                infoText = `${num}起飞${time}`;
                            }
                        } else if (type == 2) {// 火车
                            if (jsType == 1) {// 接
                                infoText = `${num}到达${time}`;
                            } else {// 送
                                infoText = `${num}出发${time}`;
                            }
                        }

                        wpStaInfos.push({
                            // 航班/车次号
                            flightTrainNo: num,
                            // 降落/起飞/进站/出站时间
                            downUpTime: os[1],
                            // 查询信息 
                            infoText: infoText,
                            // 站点名称
                            selStaName: os[4],
                            // 交通类型
                            type: type,
                            // 接送类型
                            jsType: jsType
                        });
                    });
                }
                dr.wpStaInfos = wpStaInfos;
                // 途径高速
                dr.wayHighSpeed = it.highSpeed;

                dayRoutes.push(dr);
            });
            co.dayRoutes = dayRoutes;
            // 座位数
            co.seats = o.needSeats;
            // 车辆数
            co.cars = mo.needCars;
            // 单车运价(任一一个子订单的运价)
            co.transportPrice = o.price;
            // 其他费用（主订单上的其他费用）
            co.otherFees = mo.otherPrice;
            // 订单总价（所有子订单的所有其他费用+单车运价）
            co.orderTotalPrice = mo.price;
            // 定金
            co.deposit = mo.handSelPrice;
            // 师傅现收
            co.remindRouteCash = mo.remDriverCharge;
            // 途径高速（已移至每日行程中）
            // co.wayHighSpeed = o.highSpeed;
            // 订单业务类型
            co.orderServiceType = mo.serviceType;
            // 行程详情
            let routeDetail = [];
            mo.carOrders.forEach(it => { routeDetail.push(it.routeDetail); });
            co.routeDetail = routeDetail.join('\n');
            // 客户备注
            co.cusNote = o.cusNote;
            // 驾驶员备注
            co.driverNote = o.driverNote;
            // 业务员备注
            co.salesmanNote = o.serviceNote;
            // 是否用自己的车 0-不用；1-用；
            co.useSelfCar = 0;
            // 是否交通车 0-否 1-是
            co.isTrans = o.isTrans;
            // 固定车
            co.fixedCar = o.fixedCar;
            // 固定人
            co.fixedDriver = o.fixedDriver;
            // 派车价格
            co.disPrice = o.disPrice;
            // console.log('主订单', co);
            return co;
        },
        /**
         * 将列表行子订单数据处理成表单数据
         * @param o 列表行数据子订单对象
         * @returns 处理后的子订单表单数据对象
         */
        getFmChildOrder(o) {
            const that = this;

            // 处理添加订单所需要的数据
            let co = {};
            // 订单编号
            co.orderNum = o.orderNum;
            // 派车车辆
            co.plateNum = o.disCarId ? o.disCarId.plateNum : '';
            // 团号
            co.groupNum = o.carOrderBase.routeName;
            // 操作员-用户名
            co.operator = o.carOrderBase.dutyBaseUser.uname;
            // 用车客户-用户名
            co.useCarUname = o.carOrderBase.customId.baseUserId.uname;
            // 员工
            co.serviceMan = o.carOrderBase.serviceMan
            // 车价
            co.isConfirmPrice = o.carOrderBase.isConfirmPrice
            // 已付金额
            co.alGathPrice = o.alGathPrice
            // 业务类型
            co.serviceType = o.serviceType
            // 联系人
            co.routeLink = {
                // 姓名
                name: o.carOrderBase.routeLink.split('-')[0],
                // 手机号
                phone: o.carOrderBase.routeLink.split('-')[1]
            };
            // 业务员
            co.serviceMan = {
                // 用户名
                uname: o.carOrderBase.serviceMan.split('-')[0],
                // 姓名
                name: o.carOrderBase.serviceMan.split('-')[1],
                // 手机号
                phone: o.carOrderBase.serviceMan.split('-')[2]
            };
            // 行程简称（取第一天行程的行程简称）
            co.routeShort = o.routeSimpleName;

            // 天数行程数组
            let dayRoutes = [];
            o.dayMps.forEach((it, i) => {
                let dr = {};
                // 编号
                dr.no = i + '';
                // 出发日期 2021-01-01
                dr.goDate = it.stime.split(' ')[0];
                // 开始时间 10:30
                dr.stime = it.stime.substr(11, 5);
                // 结束时间 20:00
                dr.etime = it.etime.substr(11, 5);
                // 出发地点
                dr.spoint = {
                    // 区域
                    area: `${it.spoint.city}-${it.spoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.spoint.address,
                    // 地址简称 天府广场
                    name: it.spoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.spoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.spoint.isSta == 1 ? true : false
                };
                // 上午地点数组
                let amPoints = [];
                if (it.morningPoint.length > 0) {
                    it.morningPoint.forEach(amit => {
                        amPoints.push({
                            id: amit.id + '',
                            // 区域
                            area: `${amit.city}-${amit.county}`,
                            // 地址详情 成都市 武侯区 天府广场
                            address: amit.address,
                            // 地址简称 天府广场
                            name: amit.address.split(' ')[1],
                            // 地点坐标 140.xxxxxx,30.xxxxxx
                            lnglat: amit.lngLat,
                            // 是否是站点 true-是 false-不是
                            isSta: amit.isSta == 1 ? true : false
                        });
                    });
                }
                dr.amPoints = amPoints;
                // 午餐地点
                dr.lunchPoint = !it.lunchPoint ? null : {
                    // 区域
                    area: `${it.lunchPoint.city}-${it.lunchPoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.lunchPoint.address,
                    // 地址简称 天府广场
                    name: it.lunchPoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.lunchPoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.lunchPoint.isSta == 1 ? true : false
                };
                // 下午地点数组
                let pmPoints = [];
                if (it.afternoonPoint.length > 0) {
                    it.afternoonPoint.forEach(pmit => {
                        pmPoints.push({
                            id: pmit.id + '',
                            // 区域
                            area: `${pmit.city}-${pmit.county}`,
                            // 地址详情 成都市 武侯区 天府广场
                            address: pmit.address,
                            // 地址简称 天府广场
                            name: pmit.address.split(' ')[1],
                            // 地点坐标 140.xxxxxx,30.xxxxxx
                            lnglat: pmit.lngLat,
                            // 是否是站点 true-是 false-不是
                            isSta: pmit.isSta == 1 ? true : false
                        });
                    });
                }
                dr.pmPoints = pmPoints;
                // 晚餐地点
                dr.dinnerPoint = !it.dinnerPoint ? null : {
                    // 区域
                    area: `${it.dinnerPoint.city}-${it.dinnerPoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.dinnerPoint.address,
                    // 地址简称 天府广场
                    name: it.dinnerPoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.dinnerPoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.dinnerPoint.isSta == 1 ? true : false
                };
                // 结束地点
                dr.epoint = {
                    // 区域
                    area: `${it.epoint.city}-${it.epoint.county}`,
                    // 地址详情 成都市 武侯区 天府广场
                    address: it.epoint.address,
                    // 地址简称 天府广场
                    name: it.epoint.address.split(' ')[1],
                    // 地点坐标 140.xxxxxx,30.xxxxxx
                    lnglat: it.epoint.lngLat,
                    // 是否是站点 true-是 false-不是
                    isSta: it.epoint.isSta == 1 ? true : false
                };
                // 可换车（已取消）
                dr.changeCar = {
                    // 状态 0-否；1-是；
                    check: 0,
                    // 运价设置
                    transportPrice: '',
                    // 师傅现收
                    remindRouteCash: '',
                    // 其他设置
                    otherFees: '',
                    // 途径高速
                    wayHighSpeed: '',
                    // 行程简称
                    routeShort: ''
                };
                // 临空时间数组（已移至派车操作列表）
                let emptyTimes = [];
                // 找到指定行程id对应的临空时间对象
                let fts = o.freeTimes.filter(ftit => ftit.dayRouteId == it.id);
                if (fts.length > 0) {
                    fts.forEach((ftit, index) => {
                        emptyTimes.push({
                            dayId: ftit.dayRouteId + '',
                            freeId: ftit.id + '',
                            no: index + '',
                            stime: ftit.freeStime.substr(11, 5),
                            etime: ftit.freeEtime.substr(11, 5),
                            // 停靠地点
                            stopPoint: {
                                id: (index + 1) + '',
                                // 区域
                                area: `${ftit.stayPoint.city}-${ftit.stayPoint.county}`,
                                // 地址详情 成都市 武侯区 天府广场
                                address: ftit.stayPoint.address,
                                // 地址简称 天府广场
                                name: ftit.stayPoint.address.split(' ')[1],
                                // 地点坐标 140.xxxxxx,30.xxxxxx
                                lnglat: ftit.stayPoint.lngLat,
                                // 是否是站点 true-是 false-不是
                                isSta: ftit.stayPoint.isSta == 1 ? true : false
                            },
                            // 返回地点
                            backPoint: {
                                id: (index + 2) + '',
                                // 区域
                                area: `${ftit.returnPoint.city}-${ftit.returnPoint.county}`,
                                // 地址详情 成都市 武侯区 天府广场
                                address: ftit.returnPoint.address,
                                // 地址简称 天府广场
                                name: ftit.returnPoint.address.split(' ')[1],
                                // 地点坐标 140.xxxxxx,30.xxxxxx
                                lnglat: ftit.returnPoint.lngLat,
                                // 是否是站点 true-是 false-不是
                                isSta: ftit.returnPoint.isSta == 1 ? true : false
                            }
                        });
                    });
                }
                dr.emptyTimes = emptyTimes;

                // 开始/结束地点的航班/车次查询信息 
                let seStaInfo = null;
                if (it.routeStationInfo) {
                    let infoText = '', type = it.routeStationInfo.type,
                        jsType = it.routeStationInfo.isShuttle,
                        num = it.routeStationInfo.num,
                        time = it.routeStationInfo.seltime?.substr(11, 5);

                    if (time && num) {
                        if (type == 1) {// 飞机
                            if (jsType == 1) {// 接
                                infoText = `${num}降落${time}`;
                            } else {// 送
                                infoText = `${num}起飞${time}`;
                            }
                        } else if (type == 2) {// 火车
                            if (jsType == 1) {// 接
                                infoText = `${num}到达${time}`;
                            } else {// 送
                                infoText = `${num}出发${time}`;
                            }
                        }
                    }

                    seStaInfo = {
                        // 航班/车次号
                        flightTrainNo: num,
                        // 降落/起飞/进站/出站时间
                        downUpTime: it.routeStationInfo.seltime,
                        // 查询信息 
                        infoText: infoText,
                        // 站点名称
                        selStaName: it.routeStationInfo.stationName,
                        // 交通类型
                        type: type,
                        // 接送类型
                        jsType: jsType
                    };
                }
                dr.seStaInfo = seStaInfo;

                // 其他地点航班/车次信息数组 D638=2021-04-21 07:10=2=2=火车东站/@G3286=2021-04-21 07:23=2=2=火车东站
                let wpStaInfos = [];
                if (it.otherStationInfo) {
                    let oss = it.otherStationInfo.split('/@');
                    oss.forEach(osit => {
                        let os = osit.split('=');
                        let infoText = '', num = os[0], time = os[1].substr(11, 5), type = os[2], jsType = os[3];
                        if (type == 1) {// 飞机
                            if (jsType == 1) {// 接
                                infoText = `${num}降落${time}`;
                            } else {// 送
                                infoText = `${num}起飞${time}`;
                            }
                        } else if (type == 2) {// 火车
                            if (jsType == 1) {// 接
                                infoText = `${num}到达${time}`;
                            } else {// 送
                                infoText = `${num}出发${time}`;
                            }
                        }

                        wpStaInfos.push({
                            // 航班/车次号
                            flightTrainNo: num,
                            // 降落/起飞/进站/出站时间
                            downUpTime: os[1],
                            // 查询信息 
                            infoText: infoText,
                            // 站点名称
                            selStaName: os[4],
                            // 交通类型
                            type: type,
                            // 接送类型
                            jsType: jsType
                        });
                    });
                }
                dr.wpStaInfos = wpStaInfos;
                // 途径高速
                dr.wayHighSpeed = it.highSpeed;

                dayRoutes.push(dr);
            });
            co.dayRoutes = dayRoutes;
            // 座位数
            co.seats = o.needSeats;
            // 车辆数
            co.cars = 1;
            // 单车运价
            co.transportPrice = o.price;
            // 其他费用
            co.otherFees = o.otherPrice;
            // 订单总价
            co.orderTotalPrice = parseFloat(co.transportPrice) + parseFloat(co.otherFees);
            // 定金（子订单没有定金）
            co.deposit = 0;
            // 师傅现收
            co.remindRouteCash = o.remDriverCharge;
            // 途径高速（已移至每日行程中）
            // co.wayHighSpeed = o.highSpeed;
            // 订单业务类型
            co.orderServiceType = o.serviceType;
            // 行程详情
            co.routeDetail = o.routeDetail;
            // 客户备注
            co.cusNote = o.cusNote;
            // 驾驶员备注
            co.driverNote = o.driverNote;
            // 业务员备注
            co.salesmanNote = o.serviceNote;
            // 是否用自己的车 0-不用；1-用；
            co.useSelfCar = o.useSelf;
            // 是否交通车 0-否 1-是
            co.isTrans = o.isTrans;
            // 固定车
            co.fixedCar = o.fixedCar;
            // 固定人
            co.fixedDriver = o.fixedDriver;
            // 派车价格
            co.disPrice = o.disPrice;
            // console.log('子订单', co);
            return co;
        },
        /**
         * 打开修改弹框
         */
        updOrderMdState(e) {
            this.md.updOrder.state = e;
        },
        // 修改子订单
        editChildOrder() {
            const that = this, rows = that.dg.selRows;

            if (rows.length != 1) {
                that.U.qerror('请选择一条数据');
            } else {
                let row = rows[0];
                if (!row.isMain) {
                    // 当前选中的子订单, 当前选择的子订单同级订单数组
                    let co = null, otherOrders = [];
                    for (let i = 0; i < that.resDgList.length; i++) {
                        let mo = that.resDgList[i]; // 当前遍历的主订单

                        otherOrders = [];
                        for (let j = 0; j < mo.carOrders.length; j++) {
                            let c = mo.carOrders[j]; // 当前遍历的子订单

                            if (row.id == c.id) {
                                co = c;
                            } else {
                                if (c.isTrans == 1) {
                                    // 交通车，不保存已派车的订单
                                    if (!c.disCarId || !c.disCarId.plateNum) otherOrders.push(that.getFmChildOrder(c));
                                } else {
                                    // 保存同级子订单至数组中
                                    otherOrders.push(that.getFmChildOrder(c));
                                }
                            }
                        }

                        if (co) break; // 跳出外层循环
                    }

                    if (!co) {
                        that.U.qerror(`选中的子订单已不存在，请重新选择！`);
                    } else if (co.isSplit == 1) {
                        that.U.qerror(`选中的子订单已拆分，不能修改！`);
                    } else {
                        that.md.updOrder.order = that.getFmChildOrder(co);
                        // 除当前选中的子订单之外的兄弟订单数组
                        that.md.updOrder.order.otherOrders = otherOrders;
                        // 打开修改订单弹框
                        that.md.updOrder.state = true;
                    }
                } else {
                    that.U.qerror(`选中的订单不是子订单，请重新选择！`);
                }
            }
        },

        // 付款申请
        payApply() {
            const that = this, U = that.U, rows = that.getSeledRows();

            if (rows.length < 1) {
                U.qerror('请至少选择一条订单');
            } else {
                // type 订单类型 eg:顺风车单个订单【3】顺风车多个订单【4】 普通单个订单【5】普通多个订单【6】
                let ps = { type: rows.length > 1 ? 6 : 5, orderIds: rows.map(r => r.id).join(',') };
                U.qconfim(`确认为所选订单提交付款申请？`).then(r => {
                    if (r) {
                        financeService.orderPayApply(ps).then(res => {
                            if (res.code !== 1) {
                                U.qerror(res.msg);
                            } else {
                                U.qsuccess(res.msg);

                                // 刷新列表
                                that.getDgList();
                            }
                        });
                    }
                });
            }
        },


    }
}
</script>
<style lang="less" scoped>
.travel-order-list {
    .filter-container .sh-fields {
        top: 0px !important;
        bottom: auto !important;
    }
}
</style>
